cmake_minimum_required(VERSION 2.8.3)
project(caros_kuka_lwr)

# ######################################################################################################################
# Local Variables
# ######################################################################################################################
set(node_name "${PROJECT_NAME}_node")
set(SHOULD_BUILD_CAROS_KUKALWR 1)

# ######################################################################################################################
# Make use of c++11
# ######################################################################################################################
# See: http://answers.ros.org/question/173947/export-gcc-flags-though-catkin-cfg_extras/ Should automatically use c++11
# due to using caros_control Using hardcoded path-strings instead of a variable substitution for the use-c++11.cmake
# path-name, as catkin_lint doesn't properly do variable substitution (at least in this particular situation)
include("cmake/use-c++11.cmake")

# ######################################################################################################################
# RobWork
# ######################################################################################################################
set(RW_ROOT "$ENV{RW_ROOT}")
find_package(RobWork PATHS "${RW_ROOT}")
if(NOT ROBWORK_FOUND)
    message(WARNING "caros_kuka_robot requires RobWork, this package will not be built!")
    set(SHOULD_BUILD_CAROS_KUKALWR 0)
endif()

# ######################################################################################################################
# Build process
# ######################################################################################################################
if(SHOULD_BUILD_CAROS_KUKALWR)
    # ##################################################################################################################
    # Catkin Packages
    # ##################################################################################################################
    find_package(
        catkin REQUIRED
        COMPONENTS
            caros_common
            caros_common_msgs
            caros_common_robwork
            caros_control
            caros_control_msgs
            geometry_msgs
            message_generation
            rosconsole
            roscpp
            roslint
            std_msgs
    )

    # ##################################################################################################################
    # Roslint
    # ##################################################################################################################
    set(ROSLINT_CPP_OPTS "--filter=-legal/copyright,-runtime/references")
    roslint_cpp()

    # ##################################################################################################################
    # Declare ROS messages, services and actions ##
    # ##################################################################################################################
    add_service_files(FILES KukaWriteRawService.srv)

    generate_messages(DEPENDENCIES std_msgs)

    # ##################################################################################################################
    # catkin specific configuration ##
    # ##################################################################################################################
    catkin_package(
        INCLUDE_DIRS include
        LIBRARIES ${PROJECT_NAME}_msgs
        CATKIN_DEPENDS
            caros_common
            caros_common_msgs
            caros_common_robwork
            caros_control
            caros_control_msgs
            geometry_msgs
            message_runtime
            roscpp
            std_msgs
        DEPENDS ROBWORK CFG_EXTRAS "use-c++11.cmake"
    )

    # ##################################################################################################################
    # Build
    # ##################################################################################################################
    include_directories(include ${ROBWORK_INCLUDE_DIR} ${catkin_INCLUDE_DIRS})

    add_library(${PROJECT_NAME}_msgs SHARED src/kuka_lwr_msgs.cpp)
    target_link_libraries(${PROJECT_NAME}_msgs ${ROBWORK_LIBRARIES} ${catkin_LIBRARIES})

    add_executable(${node_name} src/kuka_lwr.cpp src/kuka_robots.cpp  src/kuka_tcp_client.cpp src/main.cpp)

    target_link_libraries(${node_name} ${ROBWORK_LIBRARIES} ${catkin_LIBRARIES} ${PROJECT_NAME}_msgs)

    add_dependencies(
        ${node_name} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}
        # caros_common
        # caros_common_robwork
        # caros_control
    )
    # ##################################################################################################################
    # Testing
    # ##################################################################################################################
else()
    message(WARNING "Skipping ${PROJECT_NAME} due to missing libraries - see earlier warnings.")
endif()
